import axios from "axios";
import { ref } from "vue";

/**
 * 获取当前环境模式
 * MODE可以是 'development', 'production', 'test' 等
 * 由Vite根据运行命令自动设置
 */
const mode = import.meta.env.MODE;

const APiurl = ref({
  readBaseURL: "",
  writeBaseURL: "",
  uploadBaseURL: "",
})

console.log("Current environment:", mode);
//根据不同的环境配置不同的端口路径
//if (mode == "test") {
/**
 * 从环境变量获取API基础URL
 * 在Vite中，环境变量必须以VITE_开头
 * 这些变量应该在.env文件中定义（.env.development, .env.production等）
 */
APiurl.value.readBaseURL = import.meta.env.VITE_APP_API_ReadURL;
APiurl.value.writeBaseURL = import.meta.env.VITE_APP_API_URL;
APiurl.value.uploadBaseURL = import.meta.env.VITE_APP_API_UpfilesURL;

const resdurl = import.meta.env;
console.log("env", resdurl);

// 打印当前使用的API URL，便于调试
console.log("Read API URL:", APiurl.value.readBaseURL);
console.log("Write API URL:", APiurl.value.writeBaseURL);
console.log("Upload API URL:", APiurl.value.uploadBaseURL);

/**
 * 实例化读取操作的axios对象
 * 用于处理数据读取相关的API请求
 */
const readB = axios.create({
  // 基础路径，所有请求都会基于此路径
  baseURL: APiurl.value.readBaseURL,

  // 响应超时时间(单位毫秒)
  timeout: 5000
});

/**
 * 请求拦截器 - 读取操作
 * 在请求发送前对请求进行处理
 */
readB.interceptors.request.use(
  config => {
    // 获取token并添加到请求头
    const token = window.localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
);

/**
 * 响应拦截器 - 读取操作
 * 在收到响应后对响应进行处理
 */
readB.interceptors.response.use(
  res => {
    return res
  },
  error => {
    // 处理401错误（未授权）
    if (error.response && error.response.status === 401) {
      console.log('未授权，请重新登录');
      // 可以在这里处理跳转到登录页
      // window.location.href = '/login';
    }
    return Promise.reject(error)
  }
);

/**
 * 实例化写入操作的axios对象
 * 用于处理数据写入相关的API请求
 */
const writeB = axios.create({
  // 基础路径，所有请求都会基于此路径
  baseURL: APiurl.value.writeBaseURL,

  // 响应超时时间(单位毫秒)
  timeout: 5000
});

/**
 * 请求拦截器 - 写入操作
 * 在请求发送前对请求进行处理
 */
writeB.interceptors.request.use(
  config => {
    // 获取token并添加到请求头
    const token = window.localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
);

/**
 * 响应拦截器 - 写入操作
 * 在收到响应后对响应进行处理
 */
writeB.interceptors.response.use(
  res => {
    return res
  },
  error => {
    // 处理401错误（未授权）
    if (error.response && error.response.status === 401) {
      console.log('未授权，请重新登录');
      // 可以在这里处理跳转到登录页
      // window.location.href = '/login';
    }
    return Promise.reject(error)
  }
);

/**
 * 实例化上传操作的axios对象
 * 专门用于处理文件上传相关的API请求
 */
const uploadB = axios.create({
  // 基础路径，所有请求都会基于此路径
  baseURL: APiurl.value.uploadBaseURL,

  // 响应超时时间(单位毫秒) - 图片上传可能需要更长的超时时间
  timeout: 30000,

  // 设置请求头，指定内容类型为表单数据
  headers: {
    'Content-Type': 'multipart/form-data'
  }
});

/**
 * 请求拦截器 - 上传操作
 * 在请求发送前对请求进行处理
 */
uploadB.interceptors.request.use(
  config => {
    // 获取token并添加到请求头
    const token = window.localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
);

/**
 * 响应拦截器 - 上传操作
 * 在收到响应后对响应进行处理
 */
uploadB.interceptors.response.use(
  res => {
    return res
  },
  error => {
    // 处理401错误（未授权）
    if (error.response && error.response.status === 401) {
      console.log('未授权，请重新登录');
      // 可以在这里处理跳转到登录页
      // window.location.href = '/login';
    }
    return Promise.reject(error)
  }
);

// 导出封装的axios实例，供其他模块使用
export { readB, writeB, uploadB }
